package solitaire.controle;

import java.io.Serializable;

import javax.swing.JFrame;

import solitaire.application.Carte;
import solitaire.application.TasDeCartes;
import solitaire.presentation.PTasDeCartes;

/**
 * Controlleur du tas de cartes, faisant le lien entre le mod&egrave;le du tas de cartes et sa pr&eacute;sentation.
 * Les op&eacute;rations du mod&egrave;le sont surcharg&eacute;es pour y ajouter la mise &agrave; de la pr&eacute;sentation.
 * 
 * @author Andr&eacute; Simon, J&eacute;r&eacute;my Brault
 */
public class CTasDeCartes extends TasDeCartes implements Serializable{
	
	private static final long serialVersionUID = -1810237296411237314L;
	private PTasDeCartes presentation;

	/**
	 * Constructeur du controlleur de tas de cartes qui construit le tas de cartes, puis sa pr&eaute;sentation.
	 *
	 * @see TasDeCartes#TasDeCartes(String, solitaire.application.Usine)
	 */
	public CTasDeCartes(String nom, CUsine usine) {
		super(nom, usine);
		presentation = new PTasDeCartes(this);
	}

	@Override
	public void depiler() throws Exception {
		presentation.depiler(((CCarte)getSommet()).getPresentation());
		super.depiler();
	}

	@Override
	public void empiler(Carte carte) {
		super.empiler(carte);
		try {
			if(carte == getSommet()) {
				presentation.empiler(((CCarte)carte).getPresentation());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * @return {@link PTasDeCartes} la pr&eacute;sentation du tas de cartes
	 */
	public PTasDeCartes getPresentation(){
		return presentation;
	}
	
	public static void main(String[] args) {
		JFrame fenetre = new JFrame("Test CTasDeCartes");
		
		CCarte c1 = new CCarte(10,1);
		CCarte c2 = new CCarte(2,2);
		CCarte c3 = new CCarte(13,3);
		CCarte c4 = new CCarte(12,2);
		c1.setFaceVisible(true);
		c2.setFaceVisible(true);
		c3.setFaceVisible(true);
		c4.setFaceVisible(true);
		
		CUsine usine = new CUsine();
		
		CTasDeCartes tas = new CTasDeCartes("CTasDeCartes", usine);
		tas.empiler(c1);
		tas.empiler(c2);
		tas.empiler(c3);
		tas.empiler(c4);
		
		fenetre.getContentPane().add(tas.getPresentation());
		fenetre.setVisible(true);
		fenetre.setBounds(100, 100, 300, 300);
		fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

}
